Soru & Cevap

Listviewden kayıt nasıl silinir ?

03.03.2015 - 06:06

Mehaba,

Listview üzerinde gösterilen verileri listview'e tıkladığımda nasıl silebilirim ?

 

[code]

//VeritabanıSınıfım

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.ArrayAdapter;

public class vtIslem extends SQLiteOpenHelper {

    public vtIslem(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        
        db.execSQL("CREATE  TABLE  IF NOT EXISTS dgs (id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , baslik VARCHAR, puan VARCHAR)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        
        db.execSQL("DROP TABLE IF EXIST dgs;");
        onCreate(db);
    }
    
    public void kayitekle(String baslik,String puan)
    {
    SQLiteDatabase db=this.getWritableDatabase();
    db.execSQL("INSERT INTO dgs(baslik,puan) VALUES('" + baslik + "','" + puan + "')");
    
    }
    
    public void silme(String id)
    {
        
    }
    

    
    
    public ArrayAdapter<String> tumKayitlar(Context context)
{
        String[] sutunlar = new String[] { "baslik", "puan"};
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.query("dgs", sutunlar, null, null,null, null, null);
 
        int baslikSiraNo = c.getColumnIndex("baslik");
        int puanSiraNo = c.getColumnIndex("puan");
        String dizi[]=new String[c.getCount()];
        int sayac=0;
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
         dizi[sayac]=c.getString(baslikSiraNo) + "    "  + c.getString(puanSiraNo) ;
         sayac+=1;
        }
 
        ArrayAdapter AA= new ArrayAdapter<String>(context,R.layout.ozellistview,dizi);  
        return AA;
    }
    
}

 

[/code]

KayıtEkleme kodlarım

[code]vtIslem.kayitekle( value.toString(), tv.getText().toString());[/code]

Kayıt listeleme kodlarım

[code]vtIslem=new vtIslem(this, "dgs", null, 1);
        
        final ListView lvKayitlar=(ListView)findViewById(R.id.lstCustomListView);
        
        adaptor= vtIslem.tumKayitlar(getApplicationContext());
        lvKayitlar.setAdapter(adaptor);
       lvKayitlar.setTextFilterEnabled(true);

[/code]

 

[code]

lvKayitlar.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
           
          //  lvKayitlar.getItemAtPosition(position).toString(); bu itemdeki değeri balik + puan seklinde getiriyor.sil komutuna uyarlayamadım
            return false;
        }
    });

[/code]

Yardımlarınızı bekliyorum.

207 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-32113-1525245330.jpg
tugbaustundag
04.03.2015 - 10:31

Örnek senaryo ve çözüm:Veritabanında okul tablon olsun .Tablonda student_id ve student_email var ve sen listviewde listelenmiş ,öğrencilerin email adreslerini silmek istiorsun.Veritabanındaki sutun değerlerini yani student_id ve student_email  alanları 2 boyutlu dizi icine yerlestirceksin.

  database_veri_tablosu[i][0] =c.getString(c.getColumnIndex("student_id"));

   database_veri_tablosu[i][1] =c.getString(c.getColumnIndex("student_email")); seklinde...

 

Sonrasında  bu dizi içindeki datalar for ile okuyup for icine 

   listStundent_id.add(student_id);
   listStudent_email.add(student_email); seklnde okuyup   sutun değerlerini listview eklicek.Tabi sonrasında setAdapter yapmalısın

 

Listview onclik eventi icinde de 

String student_id=listStundent_id.get(position).toString();

Toast.makeText(getApplicationContext(),student_id,Toast.LENGTH_LONG).show();

seklnde , tıkladıgın tüm listview itemlarının yani öğrencilerin id degerni bu sekilde alırsın sonrada delet sql sorguna id verirsin silme işlemi olur.

 

Bu anlattıklarımı proje haline getirdim .http://speedy.sh/TnXcG/ListviewDelete.rar indirip inceleyebilirsin.

picture-1372-1408467635.jpg
ahmtbrk
04.03.2015 - 08:07

Şimdi şöyle düşünebiliriz.Senin sileceğin kayıtın id sine ihtiyacın var temel olarak ama listviewda sadece elinde ekrana bastığın stringler mevcut.Aslında elindeki string hangi alana aitse(veritabanındaki isim alanına mesela) o alana bu değeri gönderip de silme işlemi gerçekleştirebilirsin.

Ama buradaki sıkıntımız şu senin veritabanından getirdiğin ve ekrana bastığın veri tek sütun değilde bir kaç sütunun birleşmiş hali(isim+baslik) gibi.

Diyelim senin tablo adın Ogrenciler ve içinde ogrenciId,ogrenciAdSoy,ogrenciYas alanları mevcut.

Java taraflı şöyle bir class yazabilirsin.

[code]


public class Ogrenciler {
 
   /** Property ogrenciId */
   int ogrenciId;
 
   /** Property ogrenciAdSoy */
   String ogrenciAdSoy;
 
   /** Property ogrenciYas */
   int ogrenciYas;
 
   /**
    * Constructor
    */
   public Ogrenciler() {
   }
 
   /**
    * Gets the ogrenciId
    */
   public int getOgrenciId() {
      return this.ogrenciId;
   }
 
   /**
    * Sets the ogrenciId
    */
   public void setOgrenciId(int value) {
      this.ogrenciId = value;
   }
 
   /**
    * Gets the ogrenciAdSoy
    */
   public String getOgrenciAdSoy() {
      return this.ogrenciAdSoy;
   }
 
   /**
    * Sets the ogrenciAdSoy
    */
   public void setOgrenciAdSoy(String value) {
      this.ogrenciAdSoy = value;
   }
 
   /**
    * Gets the ogrenciYas
    */
   public int getOgrenciYas() {
      return this.ogrenciYas;
   }
 
   /**
    * Sets the ogrenciYas
    */
   public void setOgrenciYas(int value) {
      this.ogrenciYas = value;
   }
}
 

[/code]

Daha sonra veritabanından verileri çektiğin yerde 

ArrayList<Ogrenci> ogrenciList = new ArrayList<Ogrenci>();

Ogrenci ogrenci = new Ogrenci();

ogrenci.setId(..)

ogrenci.setAdSoy(...)

ogrenci.setYas(..) 

ogrenciList.add(ogrenci);

diyip bütün kayıtları bu ogrenciList isimli arraylist'e atabilirsin.

Daha sonra 
ArrayAdapter<String> yerine ArrayList<Ogrenci> dönder bu methoddan ve activity'e bu öğrenci listesini al.

Burdan sonra ise geleceğiyazanlar üzerinde android 301 eğitimlerinde özelleştirilmiş listview konusunu aç ve kendine adapter yazıp bu arraylisti içine gönder.

Zaten bundan sonra tıklama yaptığında içerde şöyle bişey yapacaksın.

Ogrenci tiklananOgrenci = (Ogrenci)parent.getItemAtPosition(position);

int ogrenciId = tiklananOgrenci.getId();

ogrenci id değeride artık eline gelecek bunu veritabanına göndereceksin ve sildireceksin.

Biraz uzun ve kafa karıştırıcı olmuş olabilir ama en dinamik yolu budur öğrenmeni tavsiye ederim.

picture-7667-1383256324.jpg
MücahidKıncır
03.03.2015 - 08:46

bunlar işe yaramadı kardeşim.listview item id ile sildiğimde farklı kaydı siliyor çünkü kayıt ekleyip sildiğinde id değerleri sürekli artıyor item id 0 1 2 .... şeklinde gidiyor